package chat

import (
	"fmt"
	mrand "math/rand"
	"os"
	"time"

	"github.com/sashabaranov/go-openai"
	log "github.com/sirupsen/logrus"
)

type Logger struct {
}

func (logger *Logger) LoggerInit() {
	// 为logger创建一个方法
	log.SetFormatter(&log.TextFormatter{
		// 格式化时间
		FullTimestamp: true,
		// 使用长时间格式
		TimestampFormat: "2006-01-02 15:04:05.000",
		// 固定时间输出格式
	})
	log.SetOutput(os.Stdout)
	// 设置日志标准化输出
	log.SetLevel(log.InfoLevel)
	// 设置更新该消息的最小级别为info类型
}

func (logger Logger) LogDebug(args ...interface{}) {
	// 最低日志级别
	log.Debug(args...)
}

func (logger Logger) LogInfo(args ...interface{}) {
	// 信息
	log.Info(args...)
}

func (logger Logger) LogWarn(args ...interface{}) {
	// 警告
	log.Warn(args...)
}

func (logger Logger) LogError(args ...interface{}) {
	// 错误
	log.Error(args...)
}

func (logger Logger) LogPanic(args ...interface{}) {
	// 恐慌
	log.Panic(args...)
}

func RandomString(n int) string {
	// 生成随机字符串
	var letter []rune
	// 创建一个切片
	lowerChars := "abcdefghijklmnopqrstuvwxyz"
	// 字符
	numberChars := "0123456789"
	// 数字
	chars := fmt.Sprintf("%s%s", lowerChars, numberChars)
	// 拼接字符串
	letter = []rune(chars)
	// 把拼接的字符串
	var str string
	// 创建一个为str的变量
	b := make([]rune, n)
	// 创建指定长的数组
	seededRand := mrand.New(mrand.NewSource(time.Now().UnixNano()))
	// 生成随机数种子，使用unix纳秒
	for i := range b {
		b[i] = letter[seededRand.Intn(len(letter))]
		// 使用随机数填入组成新的字串
	}
	str = string(b)
	// 转换字符格式
	return str
	// 返回字串
}

var (
	GPTModels = []string{
		openai.GPT432K0314,
		openai.GPT432K,
		openai.GPT40314,
		openai.GPT4,
		openai.GPT3Dot5Turbo0301,
		openai.GPT3Dot5Turbo,
		openai.GPT3TextDavinci003,
		openai.GPT3TextDavinci002,
		openai.GPT3TextCurie001,
		openai.GPT3TextBabbage001,
		openai.GPT3TextAda001,
		openai.GPT3TextDavinci001,
		openai.GPT3DavinciInstructBeta,
		openai.GPT3Davinci,
		openai.GPT3CurieInstructBeta,
		openai.GPT3Curie,
		openai.GPT3Ada,
		openai.GPT3Babbage,
	}
)

const (
	StatusFail string = "FAIL"
	// 操作状态
	PingPeriod = time.Second * 50
	// 设置心跳为50秒
	PingWait = time.Second * 60
	// 设置最大超时时间
)
